package com.xdog.okx.service;

import org.web3j.protocol.core.methods.response.*;

import java.io.IOException;
import java.math.BigInteger;
import java.util.Map;

/**
 * Web3j服务接口
 * 提供基于Web3j的区块链数据查询功能
 */
public interface IWeb3jService {

    /**
     * 获取区块详情
     *
     * @param blockNumber 区块编号
     * @return 区块信息
     * @throws IOException IO异常
     */
    EthBlock getBlockByNumber(BigInteger blockNumber) throws IOException;

    /**
     * 获取交易详情
     *
     * @param transactionHash 交易哈希
     * @return 交易信息
     * @throws IOException IO异常
     */
    EthTransaction getTransactionByHash(String transactionHash) throws IOException;

    /**
     * 获取地址余额
     *
     * @param address 地址
     * @return 余额
     * @throws IOException IO异常
     */
    EthGetBalance getBalance(String address) throws IOException;

    /**
     * 获取区块交易数量
     *
     * @param blockNumber 区块编号
     * @return 交易数量
     * @throws IOException IO异常
     */
    EthGetBlockTransactionCountByNumber getTransactionCountByBlockNumber(BigInteger blockNumber) throws IOException;

    /**
     * 获取地址交易数量
     *
     * @param address 地址
     * @return 交易数量
     * @throws IOException IO异常
     */
    EthGetTransactionCount getTransactionCountByAddress(String address) throws IOException;
    
    /**
     * 获取代币名称
     *
     * @param tokenAddress 代币合约地址
     * @return 代币名称
     * @throws Exception 异常
     */
    String getTokenName(String tokenAddress) throws Exception;
    
    /**
     * 获取代币符号
     *
     * @param tokenAddress 代币合约地址
     * @return 代币符号
     * @throws Exception 异常
     */
    String getTokenSymbol(String tokenAddress) throws Exception;
    
    /**
     * 获取代币小数位数
     *
     * @param tokenAddress 代币合约地址
     * @return 代币小数位数
     * @throws Exception 异常
     */
    BigInteger getTokenDecimals(String tokenAddress) throws Exception;
    
    /**
     * 获取代币总供应量
     *
     * @param tokenAddress 代币合约地址
     * @return 代币总供应量
     * @throws Exception 异常
     */
    BigInteger getTokenTotalSupply(String tokenAddress) throws Exception;
    
    /**
     * 获取指定地址的代币余额
     *
     * @param tokenAddress 代币合约地址
     * @param address 用户地址
     * @return 代币余额
     * @throws Exception 异常
     */
    BigInteger getTokenBalance(String tokenAddress, String address) throws Exception;
    
    /**
     * 获取代币的完整信息
     *
     * @param tokenAddress 代币合约地址
     * @return 代币完整信息
     * @throws Exception 异常
     */
    Map<String, Object> getTokenFullInfo(String tokenAddress) throws Exception;
}